// #include <stdio.h>
// #include <stdlib.h>
// #include <string.h>
// #include <assert.h>
// #include <stdbool.h>
//
// void test_one()
// {
//     // //栈溢出问题 不太好复现
//     // int array1[1000000];
//     // int array2[1000000];
//     // int array3[1000000];
// }
//
// void test_two()
// {
//     //字符串问题
//     char str[]="hello world";
//
//     //常量区 有一个地址
//     char* p = "hello world";
//     //换了房间号 说白了就是换了地址
//     p="fafas";
//     puts(p);
//
//
//     //错误情况 写入访问冲突问题
//     //*p='a';
//
//     //只存了房间号 房间号的东西是不能改变的 p指向常量区的内存  常量区的内存是不可以被修改的
//     // strcpy_s(p,10,"fafas"");
//
//     //这样也报错
//     // int* pnum=NULL;
//     // pnum[0]=123;
//
//     //动态内存申请 堆区内存
//
//
//
//
//
// }
//
// void test_malloc()
// {
//     //申请一个int变量内存 首地址返回给p
//     int* p =  (int*)malloc(sizeof(int));
//     assert(p);
//
//     p[0]=123;
//     printf("%d\n",p[0]);
//     free(p);
//     p=NULL;
//
//     //申请一段内存 --> 数组
//
//     //4可以用让用户输入的方式去表示
//     int length = 4;
//     int* parr = (int*)malloc(sizeof(int)*length);
//     int* temp = parr; //开始问题先存下 后面为了释放
//     assert(parr);
//     //当做产生了一个int parr[length]数组
//     for (int i=0;i<length;i++)
//     {
//         parr[i]=i;
//     }
//
//     for (int i=0;i<length;i++)
//     {
//         printf("%d\n",parr[i]);
//     }
//
//     free(parr); //不在指向你申请内存首地址会导致释放问题
//     parr=NULL;
// }
//
//
// void test_use_heap()
// {
//     //处理大量数据的问题
//     //栈区内存会溢出
//     int* array  = (int*)malloc(sizeof(int)*1000000000);
//     free(array);
//     array=NULL;
//
//     //动态数组 数组的大小适应数据量 可自动增长
//
//     //可以完美返回局部变量地址的问题
//
//
//
// }
//
// //这种可以
// char* get_array()
// {
//     char str[]="123456789";
//     int length = strlen(str);
//     char* pstr = (char*)malloc(sizeof(char)*length);
//     strcpy(pstr,str);
//
//     return pstr;
// }
//
// void destory_array(char * p)
// {
//    free(p);
//    p=NULL;
// }
//
// void test_calloc()
// {
//     //申请单个
//     int* p = (int*)calloc(1,sizeof(int));
//     assert(p);
//     printf("%d\n",p[0]);
//     free(p);
//     p=NULL;
//
//
//     int * parr = (int*)calloc(4,sizeof(int));
//     assert(parr);
//     for (int i=0;i<4;i++)
//     {
//         parr[i]=i;
//         printf("%d\n",parr[i]);
//     }
//
//     free(parr);
//     parr=NULL;
// }
//
// void realloc_test()
// {
//     //申请一个int变量内存 首地址返回给p
//     int*p =  (int*)malloc(sizeof(int)*2);
//     assert(p);
//     p[0]=123;
//     printf("%d\n",p[0]);
//     int*c = realloc(p,sizeof(int)*2);
//     c[0]=234;
//
//     printf("%d\n",c[0]);
//     printf("%d\n",p[0]);
//     free(c);
//     c=NULL;
//     p=NULL;
// }
//
// //申请一维数组
// int* create_array_one(int size)
// {
//     int* p= (int*)malloc(sizeof(int)*size);
//     assert(p);
//     return p;
// }
//
// void destory_array_one(int* p)
// {
//     free(p);
//     p=NULL;
// }
//
// void crate_array_two(int** array,int arrNum)
// {
//     *array = (int*)malloc(sizeof(int)*arrNum*arrNum);
//     assert(*array);
// }
//
// void print_array(int * array,int size)
// {
//     for (int i=0;i<size;i++)
//     {
//         printf("%d\n",array[i]);
//     }
// }
//
//
// int** create_array_two_two(int row,int col)
// {
//     int** p = (int**)malloc(sizeof(int*)*row);
//     assert(p);
//     for (int i=0;i<row;i++)
//     {
//        p[i] = (int*)malloc(sizeof(int)*col);
//     }
//
//     for (int i=0;i<row;i++)
//     {
//         for (int j=0;j<col;j++)
//         {
//             p[i][j]=i+j;
//         }
//     }
//
//     return p;
// }
//
// void print_array_two(int** p,int row,int col)
// {
//     for (int i=0;i<row;i++)
//     {
//         for (int j=0;j<col;j++)
//         {
//             printf("%d\t",p[i][j]);
//         }
//         printf("\n");
//     }
// }
//
//
// void destory_array_two(int** p,int length)
// {
//     for (int i=0;i<length;i++)
//     {
//         free(p[i]);
//         p[i]=NULL;
//     }
//     free(p);
//     p=NULL;
// }
//
//
//
//
// int  main()
// {
//
//     // //栈溢出问题 这个不太好复现
//     // test_one();
//     // test_two();
//
//     // test_malloc();
//     // assert(1==1);
//
//     // test_calloc();
//     // realloc_test();
//
//     // int* parr = create_array_one(10);
//     // for (int i=0;i<10;i++)
//     // {
//     //     parr[i]=i;
//     // }
//     // print_array(parr,10);
//     // destory_array_one(parr);
//
//     // int* parrTwp =  NULL;
//     // crate_array_two(&parrTwp,10);
//     // for (int i=0;i<10;i++)
//     // {
//     //     parrTwp[i]=i;
//     // }
//     // print_array(parrTwp,10);
//     // destory_array_one(parrTwp);
//
//     //二维数组 创建 两种情况  二级指针  通过数组指针
//     int **parrTwo = create_array_two_two(3,3);
//     print_array_two(parrTwo,3,3);
//     destory_array_two(parrTwo,3);
//
//     return 0;
//
// }